home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -seriously_amiga- / comms / other / dwarfx-tng / dwarfx / dwarflxdcc.dwarfx < prev    next >
Text File  |  1999-04-19  |  5KB  |  12 lines

  1. /* DWaRFLXDCC.DWaRFx V0.9 By David Newton |DWaRFx-TNG|
  2. \\
  3. // Usage: DWaRFLXDCC.DWaRFx <Env> <Command> <repeat> <Nick|Channel>
  4. \\
  5. // Responds to CTCP XDCC LIST commands.
  6. \\
  7. // This script should only be used by the DWaRFx AmIRC rexx script.
  8. \\
  9. // Assumes DWaRFx is already running!
  10. \\ 0=Private test, 1=all channels <short>, 2=all channels <long> 3=channel specified <short>, 4=Channel specified <long>, 5=nick, 6=friend
  11. */
  12. Parse Arg envadr cmd repeat utmp;utmp=Upper(Strip(utmp));dfxlogo='p='d2c(27)'b«DWaRFXDCC» ';evnum=Substr(envadr,Pos('.',envadr));if cmd=0 then mout=3;Else mout=2;Address Value(envadr);Options Results;'GetMyNick';mnick=result;bld=d2c(2);inv=d2c(22);tmp=GetClip('DFxXDCCMODE'evnum);If cmd=6 Then myfriend=' ('bld'FRIEND'bld')';Else myfriend='';Select;When tmp=1 Then mode="NORMAL";When tmp=2 Then mode="FRIENDS";When tmp=3 Then mode="OPS";Otherwise MYERROR(5);End;packfile=GetClip('DFxXDCCFILE'evnum);Call SetClip('DFxTIME'evnum,Time());total=0;If ~READPACKS() Then MYERROR(1);xlogo=bld'«XDCC»'bld;dlogo=bld'|DWaRFx-TNG|'bld;ps='';If packs>1 Then ps='s';total=GETSIZE(total);kick=GetClip('DFxXDCCKICK'evnum);slots=GetClip('DFxXDCCSLOT'evnum);if slots='' Then slots=6;slots=slots-TESTDCC();If slots<0 Then slots=0;leeched=GetClip('DFxXDCCSNAG'evnum);if leeched='' then leeched=0;leeched=GETSIZE(leeched);If kick=1 then kick="ON";Else kick="OFF";dwait=(repeat*50)*60;If repeat>0 Then Call SetClip('DFxXDCCREP'evnum,'REP');Else repeat=-1;Do While repeat~=0;If cmd=1|cmd=2 Then;Do;'Channels';chantmp=Upper(result);Do loop=1 To Words(chantmp);utmp=Word(chantmp,loop);Call SHOWCHAN();End;OUT(1,dfxlogo||xlogo' 'dlogo' - 'packs' Pack'ps' / 'total' Offererd to 'bld'ALL'bld' channels!');OUT(1,dfxlogo||xlogo' Mode ['bld||mode||bld'] Kick ['bld||kick||bld'] Slots ['bld||slots||bld'] Leeched ['bld||leeched||bld']');End;Else;Do;If cmd<5&cmd~=0 Then;Do;/* check to see if we are still on channel utmp if chanmode */;'Channels';chantmp=Upper(result);If ~Find(chantmp,utmp) Then Call MYERROR(4);OUT(1,dfxlogo||xlogo' 'dlogo' - 'packs' Pack'ps' / 'total' Offererd to channel 'bld||utmp||bld'!');OUT(1,dfxlogo||xlogo' Mode ['bld||mode||bld'] Kick ['bld||kick||bld'] Slots ['bld||slots||bld'] Leeched ['bld||leeched||bld']');End;Call SHOWCHAN();If cmd>4 Then OUT(1,dfxlogo||xlogo' 'bld||utmp||bld||myfriend' Requested Pack list!');End;If repeat>0 Then;Do;Call Delay(dwait);If Getclip('DFxXDCCREP'evnum)="" Then repeat=0;End;If repeat<0 Then repeat=0;End;Exit;SHOWCHAN:;'GETMYNICK';OUT(mout,utmp' :'xlogo' 'dlogo' - 'packs' Pack'ps' / 'total' Offererd! /ctcp 'result' XDCC HELP ');If cmd~=1&cmd~=3 Then;Do;Do loop=1 To packs;WAIT(2);OUT(mout,utmp' :'xlogo number.loop rating.loop files.loop'/'packsize.loop name.loop info.loop);End;End;WAIT(2);OUT(mout,utmp' :'xlogo' Mode ['bld||mode||bld'] Kick ['bld||kick||bld'] Slots ['bld||slots||bld'] Leeched ['bld||leeched||bld']');Return(0);OUT:PROCEDURE;Select;When Arg(1)=1 Then 'Echo 'Arg(2);When Arg(1)=2 Then 'RAW NOTICE 'Arg(2);When Arg(1)=3 Then;Do;mess=Arg(2);mess=Substr(mess,Pos(':',mess)+1);'Echo p='d2c(27)'b«DWaRFXDCC» 'mess;End;Otherwise;End;Return(0);WAIT:PROCEDURE;secs=Arg(1);Call Time(r);Do Until Time(e)>secs;End;Return(0);MYERROR:;Parse Arg errnum;elogo=dfxlogo'ERROR:';Select;When errnum=1 Then 'Echo 'elogo' Can t read XDCC packs file!';When errnum=2 Then 'Echo 'elogo' Error in XDCC pack number 'numb'!';When errnum=3 Then 'Echo 'elogo' Can t find XDCC file 'filename' in pack number 'numb'!';When errnum=4 Then;Do;Call SetClip('DFxXDCCREP');'Echo 'dfxlogo'Repeat mode halted, as you are no longer in channel 'utmp'!';End;When errnum=5 Then 'Echo 'elogo' Your XDCC system is currently switched OFF!';Otherwise;End;Exit;Return(0);GETSIZE:PROCEDURE;size=TrunC(Arg(1)/1024);If size<1000 Then size=Copies('0',3-Length(size))||size'KB';Else;Do;size=TrunC(size/1024);size=Copies('0',3-Length(size))||size'MB';End;Return size;TESTDCC:;w=Showlist('W') Showlist('T');n=0;p=1;Do Until p=0;n=n+1;p=Pos('AmIRC DCC S',w,p+21);End;Return n-1;READPACKS:;packs=0;If ~Open(1,packfile,R) Then Return(0);Do While ~Eof(1);ln=Strip(Readln(1));If Left(ln,1)='#' Then SCANPACK();End;Return(1);SCANPACK:;packs=packs+1;files=0;size=0;Parse Var ln '#'numb '#'rate '#'status.packs '#'name.packs '#'info.packs '#'filelist;info.packs=Strip(info.packs);name.packs=Strip(name.packs);filelist=strip(filelist);If numb<10 Then numb='0'numb;number.packs=bld'<'Strip(numb)'>'bld;rating.packs=inv'['Copies('*',rate)||Copies(' ',5-rate)']'inv;If info.packs="" Then MYERROR(2);Do While filelist~="";Parse Var filelist filename '#'filelist;If filename~="" Then;Do;filename=strip(filename);If ~Exists(filename) Then MYERROR(3);files=files+1;filename.packs.files=filename;Parse Value StateF(filename) With junk1 bytes junk2;size=size+bytes;End;End;If files=0|size=0 Then MYERROR(2);If status.packs=2 Then;Do;packs=packs-1;Return(0);End;files.packs=Copies('0',2-Length(files))||files;total=total+size;packsize.packs=GETSIZE(size);If (status.packs=1)&((cmd~=6)&(mout~=3)) Then;Do;name.packs=Copies('?',Length(name.packs));info.packs=bld'*Registered Friends Only!*'bld;End;Return(0)